/** 3 自定义异常 -- 根据实际情况设置异常
 * 我们在处理用户名密码错误的时候可能需要抛出两种异常，我们基于已有的异常进行扩展（继承），创建和我们业务相关的异常类
 * 具体方法：
 * （1）自定义异常，然后继承自Exception或者RunTimeException
 * （2）实现一个带有String类型参数的构造方法，参数含义：出现异常的原因
 * 注意事项：
 * （1）自定义异常通常会继承自Exception或者RunTimeException
 * （2）继承自Exception的异常默认是受查异常
 * （3）继承自RunTimeException的异常默认是非受查异常
 */

//eg6：实现一个用户登录功能
class UserNameException extends Exception{
    public UserNameException(String message){
        super(message);
    }
}
class PasswordException extends Exception{
    public PasswordException(String message){
        super(message);
    }
}

public class Login {
    private String userName = "admin";
    private String password = "123456";

    public void loginInfo(String userName, String password)
    throws UserNameException,PasswordException{  //throws声明异常
        if(!this.userName.equals(userName)){
            throw new UserNameException("用户名错误！"); //抛出异常
        }
        if(!this.password.equals(password)){
            throw new PasswordException("密码错误！");
        }
        System.out.println("登录成功！");
    }

    public static void main(String[] args) {
        try {   //捕获异常
            Login login = new Login();
            login.loginInfo("admin","123456");
        }catch (UserNameException e){
            e.printStackTrace();
        }catch (PasswordException e){
            e.printStackTrace();
        }
    }
}
